//
//  WHTreeViewController.h
//  WHValueKit
//
//  Created by peng wang on 2023/2/21.
//

#import <UIKit/UIKit.h>
#import <WHTree/WHTreeConfig.h>

@class WHTreeViewController, WHTreeManager, WHTreeItem;

// 子类中实现的 delegate
@protocol WHTreeViewControllerParentClassDelegate <NSObject>

@optional

// 刷新后，传出刷新通知，在子类中刷新数据
- (void)refreshTreeViewController:(WHTreeViewController *)treeViewController;

// 监听 cell 点击事件（父类实现了一个点击展开节点的逻辑，如需自定义，需要重新 tableView:didSelectRowAtIndexPath 方法）
- (void)treeViewController:(WHTreeViewController *)treeViewController didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

// 如果是单选，点击 cell 会直接调用，如果是多选，通过 prepareCommit 方法会调用
- (void)treeViewController:(WHTreeViewController *)treeViewController checkItems:(NSArray <WHTreeItem *>*)items;

// 监听 cell 的 checkbox 点击事件
- (void)treeViewController:(WHTreeViewController *)treeViewController didSelectCheckBoxRowAtIndexPath:(NSIndexPath *)indexPath;

@end

// 上一页面中实现的 delegate
@protocol WHTreeViewControllerDelegate <NSObject>

- (void)treeViewController:(WHTreeViewController *)treeViewController checkItems:(NSArray <WHTreeItem *>*)items;

@end



@interface WHTreeViewController : UITableViewController

// 代理
@property (nonatomic, weak) id<WHTreeViewControllerParentClassDelegate> classDelegate;
@property (nonatomic, weak) id<WHTreeViewControllerDelegate> delegate;

@property (nonatomic, strong) WHTreeManager *manager;	// 管理类
@property (nonatomic, assign) WHTreeType treeType;		// 树的UI样式

@property (nonatomic, assign) BOOL isShowExpandedAnimation;   // 是否显示展开/折叠动画，默认 YES
@property (nonatomic, assign) BOOL isShowArrowIfNoChildNode;  // 是否没有子节点就不显示箭头，默认 NO
@property (nonatomic, assign) BOOL isShowArrow;               // 是否显示文字前方的箭头图片，默认 YES
@property (nonatomic, assign) BOOL isShowCheck;               // 是否显示勾选框，默认 YES
@property (nonatomic, assign) BOOL isSingleCheck;             // 是否是单选，默认 NO
@property (nonatomic, assign) BOOL isCancelSingleCheck;       // 是否单选时再次点击取消选择，默认 NO
@property (nonatomic, assign) BOOL isExpandCheckedNode;       // 是否展开已选择的节点，默认 YES
@property (nonatomic, assign) BOOL isShowLevelColor;          // 是否展示层级颜色，默认 YES
@property (nonatomic, assign) CGFloat rowHeight;			  // 行高，默认44
@property (nonatomic, assign) CGFloat textSize;			 	  // 文字大小，默认14
@property (nonatomic, strong) UIColor *textColor;			  // 文字颜色，默认cell文字颜色
@property (nonatomic, strong) UIColor *normalBackgroundColor; // 默认背景色，默认为白灰色
@property (nonatomic, strong) NSArray <UIColor *>*levelColorArray;	// 层级文字颜色，默认为textColor颜色（若设置的层级不够，最里层的节点设置取数组最后一个值）
@property (nonatomic, strong) NSArray <UIFont *>*levelFontArray;    // 层级文字字体，默认为textSize大小（若设置的层级不够，最里层的节点设置取数组最后一个值）
@property (nonatomic, strong) NSArray <NSString *>*checkItemIds;    // 从外部传进来的所选择的 itemIds

// 测试数据
- (WHTreeManager *)getTreeDatasForTest;

// 准备提交，调用代理方法
- (void)prepareCommit;

// 全部勾选/全部取消勾选
- (void)checkAllItem:(BOOL)isCheck;

// 全部展开/全部折叠
- (void)expandAllItem:(BOOL)isExpand;

// 展开/折叠到多少层级
- (void)expandItemWithLevel:(NSInteger)expandLevel;

// 获取当前显示的 showItems
- (NSArray *)getShowItems;

// 获取所有的节点
- (NSArray *)getAllItems;

// 获取所有勾选的节点
- (NSArray *)getCheckItems;

// 获取 indexPath 数组
- (NSArray <NSIndexPath *>*)getUpdateIndexPathsWithCurrentIndexPath:(NSIndexPath *)indexPath andUpdateNum:(NSInteger)updateNum;

@end
